﻿using FileCopyExtensions;
using System.IO;

namespace WinFormCS
{
    /// <summary>
    /// Classe montrant un exemple d'utilisation de la librairie
    /// </summary>
    class Exemple
    {
        // DEFINITION DES VARIABLES
        private event CopyFileCallback CopyProgress;    // Evenement pour la progression
        private event CopyFileTerminate CopyEnd;        // Evenement pour la fin de la copie


        /// <summary>
        /// Constructeur par défautt
        /// </summary>
        public Exemple()
        {
            FileInfo fichierSource = new FileInfo(@"Le\Chemin\vers\mon\fichier\MonFichier.irc");    // Définition du fichier source
            FileInfo DossierDest = new FileInfo(@"Le\Dossier\De\Destination");                      // Définiation du repertoire de destination

            CopyProgress += new CopyFileCallback(Exemple_CopyProgress);
            CopyEnd += new CopyFileTerminate(Exemple_CopyEnd);

            // Lancement de la fonction de copie dans un BackgroundWorker
            FileCopyExtensions.FileCopyExtensions.CopyFile(fichierSource, DossierDest, CopyFileOptions.All, CopyProgress, CopyEnd);
        }

        /// <summary>
        /// Fonction qui sera executée lorsque la copie sera terminé
        /// </summary>
        /// <param name="success">Booléen qui vaut vrai si la copie s'est terminé avec succès, faux sinon</param>
        void Exemple_CopyEnd(bool success)
        {
            // Code que j'effectue à la fin de la copie (message, etc.)
            // ...
        }

        /// <summary>
        /// Fonction qui sera appelée à chaque evenements de la progression
        /// </summary>
        /// <param name="source">Fichier source</param>
        /// <param name="destination">Dossier de destination</param>
        /// <param name="state"></param>
        /// <param name="totalFileSize">Nombre de bytes total du fichier</param>
        /// <param name="totalBytesTransferred">Nombre de bytes transféré</param>
        /// <returns>Action a faire pendant la copie (on continue, on s'arrete, etc.)</returns>
        CopyFileCallbackAction Exemple_CopyProgress(FileInfo source, FileInfo destination, object state, long totalFileSize, long totalBytesTransferred)
        {
            // Code que je veux effectuer (mise à jour d'une barre de progression, etc.)
            // ...

            // Suivant la valeur de retour, on continue ou pas la copie
            return CopyFileCallbackAction.Continue;
        }
    }
}
